Processors are electronic circuits capable of executing one or more sequences of instructions, tasks, or threads. In a conventional processor, operations are executed in series. As such, if an operation takes a long time to complete (e.g., if its completion depends upon the result of an external event), a subsequent operation still has to wait in a queue. The wait occurs even when execution of the subsequent operation is independent from that of the preceding operation, and regardless of whether the processor is otherwise available during that time.
The concept of multithreading or multitasking was developed, at least in part, to improve the use of available computing resources. Generally speaking, a multithreading or multitasking processor includes hardware support for switching between different instructions, tasks, or threads more efficiently than conventional processors.
As a processor operates, errors may occur. And, in the event of a processing error, techniques exist to capture state information of the processor at the time of the error. Such information may include, for instance, register values, pointers, program counters, condition codes, and the like. Once captured, a debugging tool may then be used to analyze that information. As the inventors hereof have recognized, even in the case of a multithreading processor, however, debug operations necessary to capture state information can still cause the multithreading processor to halt the execution of other instructions or threads.